package org.dtrd.modules.flup.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dtrd.modules.flup.entity.bean.FlupEvaluation;
import org.dtrd.modules.flup.entity.po.DtrdEntRdFlupEvaluation;
import org.dtrd.modules.flup.mapper.DtrdEntRdFlupEvaluationMapper;
import org.dtrd.modules.flup.service.IDtrdEntRdFlupEvaluationService;
import org.springframework.stereotype.Service;

import java.util.Optional;


/**
 * <p>
 * 患者复诊评价 服务实现类
 * </p>
 *
 * @author QR
 * @since 2021-12-23
 */
@DS("multi-datasource1")
@Service
public class DtrdEntRdFlupEvaluationServiceImpl extends ServiceImpl<DtrdEntRdFlupEvaluationMapper, DtrdEntRdFlupEvaluation> implements IDtrdEntRdFlupEvaluationService {


    public LambdaQueryWrapper<DtrdEntRdFlupEvaluation> baseQueryWrapper() {
        return Wrappers.lambdaQuery(DtrdEntRdFlupEvaluation.class)
                        .eq(DtrdEntRdFlupEvaluation::getIsDel, 0);
    }

    public LambdaUpdateWrapper<DtrdEntRdFlupEvaluation> baseUpdateWrapper() {
        return Wrappers.lambdaUpdate(DtrdEntRdFlupEvaluation.class)
                        .eq(DtrdEntRdFlupEvaluation::getIsDel, 0);
    }

    @Override
    public FlupEvaluation getFlupEvaluation(Integer flupId) {
        DtrdEntRdFlupEvaluation evaluation = getByFlupId(flupId);
        return Optional.ofNullable(evaluation)
                .map(e -> new FlupEvaluation().parseFromPO(e))
                .orElse(null);
    }

    @Override
    public DtrdEntRdFlupEvaluation getByFlupEvaluationFlupId(Integer flupId) {
        return getByFlupId(flupId);
    }

    private DtrdEntRdFlupEvaluation getByFlupId(Integer flupId) {
        LambdaUpdateWrapper<DtrdEntRdFlupEvaluation> wrapper = Wrappers.lambdaUpdate(DtrdEntRdFlupEvaluation.class)
                .eq(DtrdEntRdFlupEvaluation::getFlupRecordId, flupId);
        return getOne(wrapper);
    }

    @Override
    public boolean saveFlupEvaluation(FlupEvaluation flupEvaluation) {
        Integer flupId = flupEvaluation.getFlupId();
        LambdaUpdateWrapper<DtrdEntRdFlupEvaluation> wrapper = baseUpdateWrapper()
                .eq(DtrdEntRdFlupEvaluation::getFlupRecordId, flupId);
        DtrdEntRdFlupEvaluation evaluation = new DtrdEntRdFlupEvaluation().parseFromDTO(flupEvaluation);
        return saveOrUpdate(evaluation, wrapper);
    }
}
